#include "edt.h"
#include<QDialog>
#include<QVBoxLayout>
#include<QHeaderView>

Edt::Edt(Fenetre *parent, Qt::WindowFlags f) : QDialog(parent, f)
{
    parent_ = parent;
    /*conteneur principal*/
    contPrincipal_ = new QVBoxLayout(this);

    /*définition du conteneur de programme*/
    contProg_ = new QHBoxLayout();
    /*définition du conteneur de calendrier*/
    contCalend_ = new QVBoxLayout;
        /*définition du calendrier*/
        calend_ = new QCalendarWidget();
        /*ajout du calendrier à son conteneur*/
        contCalend_->addWidget(calend_);
    /*ajout du conteneur de calendrier au conteneur de programme*/
    contProg_->addLayout(contCalend_);

    /*définition de l'affichage du résultat*/
    contAffRes_ = new QVBoxLayout();
        /*définition de la grille de choix*/
        choixAffich_ = new QGridLayout();
            /*définition des boutons de choix*/
            groupe_ = new QPushButton(QString("Groupe"));
            module_ = new QPushButton(QString("Module"));
            /*ajout des boutons à la grille*/
            choixAffich_->addWidget(groupe_, 0,0);
            choixAffich_->addWidget(module_, 0,1);
    /*ajout de la grille de choix à l'affichage de résultat*/
    contAffRes_->addLayout(choixAffich_);

    /*définition de l'entrer du choix*/
    choixEdit_ = new QLineEdit("Nom de groupe ou numéro de module");
    /*ajout de l'entrer à l'afficheur de résultat*/
    contAffRes_->addWidget(choixEdit_);

    /*définition de la vue*/
    listAff_ = new QTreeView();
    listAff_->header()->hide();
    /*définition du modele de la vue*/
    modeleAff_ = new QStandardItemModel();
    /*ajout du modele*/
    listAff_->setModel(modeleAff_);
    /*ajout de la vue à l'affichage*/
    contAffRes_->addWidget(listAff_);

    /*ajout de l'affichage de résultat au conteneur de programme*/
    contProg_->addLayout(contAffRes_);

    /*ajout du conteneur de programme au conteneur principal*/
    contPrincipal_->addLayout(contProg_);

    quitter_ = new QPushButton("Quitter");
    contPrincipal_->addWidget(quitter_);


    /*signaux*/
    QObject::connect(quitter_,
                     SIGNAL(clicked()),
                     this,
                     SLOT(close()));

    QObject::connect(calend_,
                     SIGNAL(clicked(QDate)),
                     this,
                     SLOT(getCreneaux(QDate)));

    QObject::connect(groupe_,
                     SIGNAL(clicked()),
                     this,
                     SLOT(afficherGroupe()));

    QObject::connect(module_,
                     SIGNAL(clicked()),
                     this,
                     SLOT(afficherModule()));

    getCreneaux(calend_->selectedDate());
}

void Edt::getCreneaux(QDate date)
{
    ensCre_ = parent_->getControleur()->getCreneaux(date);
    afficherCreneaux();
}

void Edt::afficherCreneaux()
{
    QStandardItem* item;
    modeleAff_->removeRows(0, modeleAff_->rowCount());
    ensCreneau::iterator it;
    ensCreneau cre = ensCre_->getEnsembleCre();
    for(it=cre.begin(); it!=cre.end(); ++it)
    {
        item = new QStandardItem("Creneau du " + QString::number((*it)->getDate().getDay()) + "/" + QString::number((*it)->getDate().getMonth()) + "/" + QString::number((*it)->getDate().getYear()));
        item->appendRow(new QStandardItem("Commence à " + QString::number((*it)->getHeure()) + " Heure"));
        item->appendRow(new QStandardItem("Dans la salle " + QString::number((*it)->getSalle()->getNumSalle())));
        item->appendRow(new QStandardItem("avec le groupe " + QString::fromStdString((*it)->getGroupe()->getNomGroupe())));
        item->appendRow(new QStandardItem("pour le module " + QString::number((*it)->getModule()->getIdMod())));
        modeleAff_->appendRow(item);
    }
}

void Edt::afficherGroupe()
{
    std::string nomg = choixEdit_->text().toStdString();
    enCreTriHeure res;
    ensCreneau::iterator itg;
    ensCreneau cre = ensCre_->getEnsembleCre();
    for(itg=cre.begin(); itg!=cre.end(); ++itg)
    {
        if(nomg==(*itg)->getGroupe()->getNomGroupe())
        {
            res.insert((*itg));
        }
    }
    QStandardItem* item;
    modeleAff_->removeRows(0, modeleAff_->rowCount());
    enCreTriHeure::iterator it;
    for(it=res.begin(); it!=res.end(); ++it)
    {
        item = new QStandardItem("Creneau du " + QString::number((*it)->getDate().getDay()) + "/" + QString::number((*it)->getDate().getMonth()) + "/" + QString::number((*it)->getDate().getYear()));
        item->appendRow(new QStandardItem("Commence à " + QString::number((*it)->getHeure()) + " Heure"));
        item->appendRow(new QStandardItem("Dans la salle " + QString::number((*it)->getSalle()->getNumSalle())));
        item->appendRow(new QStandardItem("avec le groupe " + QString::fromStdString((*it)->getGroupe()->getNomGroupe())));
        item->appendRow(new QStandardItem("pour le module " + QString::number((*it)->getModule()->getIdMod())));
        modeleAff_->appendRow(item);
    }
}

void Edt::afficherModule()
{
    int numMod = choixEdit_->text().toInt();
    enCreTriHeure res;
    ensCreneau::iterator itg;
    ensCreneau cre = ensCre_->getEnsembleCre();
    for(itg=cre.begin(); itg!=cre.end(); ++itg)
    {
        if(numMod==(*itg)->getModule()->getIdMod())
        {
            res.insert((*itg));
        }
    }
    QStandardItem* item;
    modeleAff_->removeRows(0, modeleAff_->rowCount());
    enCreTriHeure::iterator it;
    for(it=res.begin(); it!=res.end(); ++it)
    {
        item = new QStandardItem("Creneau du " + QString::number((*it)->getDate().getDay()) + "/" + QString::number((*it)->getDate().getMonth()) + "/" + QString::number((*it)->getDate().getYear()));
        item->appendRow(new QStandardItem("Commence à " + QString::number((*it)->getHeure()) + " Heure"));
        item->appendRow(new QStandardItem("Dans la salle " + QString::number((*it)->getSalle()->getNumSalle())));
        item->appendRow(new QStandardItem("avec le groupe " + QString::fromStdString((*it)->getGroupe()->getNomGroupe())));
        item->appendRow(new QStandardItem("pour le module " + QString::number((*it)->getModule()->getIdMod())));
        modeleAff_->appendRow(item);
    }
}
